use std::collections::HashMap;

/*
更新HashMap<K,V>
    HashMap大小可变
    每一个K同时只能对应一个V
    更新HashMap中的数据：
        K已经存在对应一个V
            替换现有的
               插入一堆KV然后在插入同样的K，但是不同的V，那么原来的V会被替换掉
            保留现有的忽略新的
                entry 检查指定的K是否对应一个V

            合并现有的和新的
        K不存在
            新增KV
Hash 函数
    默认情况下，hashMap 使用加密功能强大的hash函数，可以抵抗拒绝服务（DoS）攻击
        不是可用的最快的hash算法
        但具有更好的安全性
    可以指定不同的hasher来切换到另一个函数
        hasher是实现BuildHasher trait 类型
*/
fn main() {
    let mut scores = HashMap::new();
    scores.insert(String::from("bule"), 10);
    scores.insert(String::from("bule"), 25);
    // 判断yellow是否存在，不存在新增新的V
    scores.entry(String::from("Yellow")).or_insert(80);
    
    // 判断bule是否存在，存在保留原来的V
    scores.entry(String::from("bule")).or_insert(60);

    println!("{:?}",scores);

    let text = "Hello world wonderful world";
    let mut map = HashMap::new();
    for word in text.split_whitespace(){
        let count = map.entry(word).or_insert(0);
        *count+=1;
    }
    println!("{:#?}",map);
}
